#include <iostream>

/*
    继承中的构造函数和析构函数：
        1、子类在对象创建的时候，需要先调用父类中的构造函数，来初始化父类继承到的部分，默认调用的是父类中的无参构造函数
        2、子类对象在销毁的时候，先调用自己的析构函数，再调用父类的析构函数
        默认调用的是无参的构造函数
 */

class BaseClass
{
public:
    int age{};

    BaseClass(int age)
    {
        std::cout << "父类构造函数执行了" << std::endl;
        this->age = age;
    }

    BaseClass()
    {}

    ~BaseClass()
    {
        std::cout << "父类的析构函数执行了" << std::endl;
    }

};

class SubClass : public BaseClass
{
public:
    SubClass()
//    : BaseClass(10) // 将这个注释了说明有无参构造函数，默认先调用父类的无参构造函数

    {
        std::cout << "子类的构造函数执行了" << std::endl;
    }

    ~SubClass()
    {
        std::cout << "子类的析构函数执行了" << std::endl;
    }

};

int main()
{
//    BaseClass baseClass = BaseClass(10);
    SubClass subClass = SubClass();
    return 0;
}